package com.itany.corejava.code08_常用类.string;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年11月09日 15:19
 */
public class Test01_创建方式 {
    public static void main(String[] args) {
        // 方式一:直接创建
        // 该方式本身不符合引用数据类型的特性的，不符合面向对象的规范
        // 原则上，所有的引用数据类型都是通过关键字new来创建的
        // 只有基本数据类型才能直接赋值
        // 由于String使用频率较高，JVM对其做了优化
        // 由于String是一种特殊的引用数据类型，支持直接赋值的方式
        // 直接赋值的方式进行比较时候，只比较值，不关心地址
        // 该方式的数据没有存储到堆中，而是存储在常量池
        String s1="hello";
        String s2="hello";
        System.out.println(s1==s2);

        // 方式二:使用new的方式创建
        //创建一个字符串，在堆中分配了空间
        String s3=new String("aa");

        //直接赋值为aa，没有在堆中创建空间的
        String s4="aa";
        System.out.println(s3==s4);//false
        System.out.println(s3.equals(s4));//true

        // 将字符串的值赋值为null，此时没有在堆中创建空间
        String s5=null;

        // 在堆中开辟一块空间，其存的值为hello
        String s6=new String("hello");
        System.out.println(s1==s6);
        System.out.println(s1.equals(s6));

        // 字符串可以与任意类型进行拼接
        System.out.println(s1+"heihei");
        System.out.println(s2+true);
        System.out.println(s3+897);


    }
}
